Object oriented programming systems and processes, also referred to as "object oriented computing environments", have been the subject of much investigation and interest in state of the art data processing environments. As is well known to those having skill in the art, object oriented programming systems are composed of a large number of "objects". An object is a data structure, also referred to as a "frame", and a set of operations or functions, also referred to as "methods", that can access that data structure. The frame has many "slots", each of which contains an "attribute" of the data in the slot. The attribute may be a primitive (such as an integer or string) or an object reference which is a pointer to another object. Objects having identical data structures and common behavior can be grouped together into, and collectively identified as, a "class".
Each defined class of objects will usually be manifested in a number of "instances". Each instance contains the particular data structure for a particular example of the object. In an object oriented computing environment, the data is processed by requesting an object to perform one of its methods by sending the object a "message". The receiving object responds to the message by choosing the method that implements the message name, executing this method on the named instance, and returning control to the calling high level routine along with the results of the method. The relationships between classes, objects and instances are established during "build time" or generation of the object oriented computing environment, i.e. prior to "run time" or execution of the object oriented computing environment.
In addition to the relationships between classes, objects and instances identified above, inheritance relationships also exist between two or more classes such that a first class may be considered a "parent" of a second class and the second class may be considered a "child" of the first class. In other words, the first class is an ancestor of the second class and the second class is a descendant of the first class, such that the second class (i.e., the descendant) is said to inherit from the first class (i.e. the ancestor). The data structure of the child class includes all of the attributes of the parent class.
A primary advantage of object oriented computing systems is the "encapsulation" of data. The data, represented by the object frame, is encapsulated or surrounded by its methods. Only the object's methods can access the data structure within the object. Accordingly, all data handling is performed by the object which "owns" the data.
The data encapsulated in an object is typically updated or retrieved by many external systems or activities. For example, the data may be updated or retrieved by a user operating interactively. Alternatively, the data may be updated or retrieved as a part of a batch process. As another alternative, another application or system may require synchronous or asynchronous access or update of the data.
Heretofore, a unique external interface was provided between the object and each external system with which the object interacted. Unfortunately, the proliferation of external interfaces complicated the structure of the object oriented system. Indeed, the need for separate interfaces has reduced the advantage of data encapsulation, since data validations and data conversion routines were replicated to handle each type of interface. Moreover, since validation and data manipulation logic may not be uniformly positioned in the various interfaces, no single object had total responsibility for the encapsulated data. This made it difficult to add additional interfaces.
The need for separate interfaces also complicated the object oriented computing system because each interface typically passed data at different levels of semantics. Each piece of data in an object oriented computing system has at least three different levels of semantics: the user level which defines how the data is presented to the user; the data level which defines how the data is stored in nonvolatile storage; and the internal representation in object space, i.e. the object oriented version of real memory. Thus, although a single object was often passing data to a variety of interfaces, each interface typically required a different level of semantics.